#pragma once
#include<iostream>
#include<string>
#include<fstream>
//工具类
class Util
{

public:
    static bool ReadFileContent(const std::string& filename,std::string* out)
    {
        //version:默认以文本读取文件 
        // out->clear();
        // std::ifstream in(filename);
        // if(!in.is_open())
        // {
        //     std::cout<<"ReadFileContent打开文件失败"<<std::endl;
        //     return false;
        // }
        // std::string line;
        // while(std::getline(in,line))
        // {
        //     *out+=line;
        // }
        // in.close();

        //version2：以二进制进行读取

        int filesize=FileSize(filename);
        if(filesize>0)
        {
            std::ifstream in(filename);
            if(!in.is_open()) return false;
            out->resize(filesize);
            in.read((char*)out->c_str(),filesize);
            in.close();
        }
        else
        {
            return false;
        }
        return true;
    }

    static bool ReadOneLine(std::string &bigstr, std::string *out, const std::string &sep/*\r\n*/)
    {
        auto pos = bigstr.find(sep);
        if(pos == std::string::npos)
            return false;

        *out = bigstr.substr(0, pos);
        bigstr.erase(0, pos + sep.size());
        return true;
    }

    static int FileSize(const std::string& filename)
    {
        std::ifstream in(filename,std::ios::binary);
        if(!in.is_open()) return 0;
        in.seekg(0,in.end);
        int filesize=in.tellg();
        in.seekg(0,in.beg);
        in.close();
        return filesize;
    }
};